﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using Sinacor.Infra.UI.Controls.SmartClient;
using Sinacor.UI.Bovespa.Parametro.Presenter;
using Sinacor.Infra.UI.Controls.SmartClient.Validation;
using Sinacor.Infra.UI.Common;
using PSE.Framework.UI.Resources;

namespace Sinacor.UI.Bovespa.Parametro.View.SmartClient
{
    public partial class CadastroParametro : SinacorWindow, ICadastroParametro
    {
        #region Presenter
        /// <summary>
        /// Property com a presenter da view
        /// </summary>
        public CadastroParametros presenter { get; set; }
        #endregion

        #region Construtor
        /// <summary>
        /// Construtor padrão da view
        /// </summary>
        public CadastroParametro()
        {
            // Este deve ser o primeiro método do contrutor da View
            InitializeComponent();

            // Inicialize a presenter no construtor
            this.presenter = new CadastroParametros(this);

            this.DataContext = this.presenter;

            // Assine os eventos da janela no construtor, eventos de outros objetos devem ser assinados
            // no XAML.
            this.AfterInitialize += new RoutedEventHandler(CadastroParametro_AfterInitialize);

            this.Closing += new System.ComponentModel.CancelEventHandler(CadastroParametro_Closing);
        }
        #endregion

        #region Tratamento de eventos

        #region Inicialização da View
        private void CadastroParametro_AfterInitialize(object sender, RoutedEventArgs e)
        {

            this.presenter.Inicializar();
        }
        #endregion
        #region Verificar ao Finalizar
        private void CadastroParametro_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (this.presenter.Parametro.ocorreAlteracao)
            {
                e.Cancel = (SinacorMessageBox.Show((string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Parametro.Message.ConfirmaOperacao"), SinacorMessageBoxButton.YesNo, SinacorMessageBoxImage.Question) != SinacorMessageBoxResult.Yes);
            }
        }
        #endregion


        #region Evento Botão Salvar
        private void BtnSalvar_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            if (this.ValidateContainer())
            {


                if (DtpHorarioIncioPregao.Validate())
                {
                    this.ShowUserWaitingProcess();
                    this.presenter.AlterarParametro();
                    this.HideUserWaitingProcess();
                }
            }
        }
        #endregion

        #region Evento Botão Cancelar
        private void BtnCancelar_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            this.ShowUserWaitingProcess();
            this.presenter.Desfazer();
            this.HideUserWaitingProcess();
        }
        #endregion

        #region Marcação  Check NaoExecutada
        private void ChkNaoExecutada_Checked(object sender, RoutedEventArgs e)
        {
            CmbNaoExecutada.IsEnabled = true;
        }

        #endregion

        #region Desmarcar Check NaoExecutada
        private void ChkNaoExecutada_Unchecked(object sender, RoutedEventArgs e)
        {
            CmbNaoExecutada.IsEnabled = false;
            CmbNaoExecutada.SelectedIndex = -1;
        }
        #endregion

        #region Marcar Check Agente Compensação

        private void ChkAgenteCompensacao_Checked(object sender, RoutedEventArgs e)
        {
            CmbAgenteCompensacao.IsEnabled = true;
            this.presenter.AtivarInformacaoObrigatoria();
            CmbAgenteCompensacao.Focus();
        }
        #endregion
        #region Desmarcar Agente Compensação
        private void ChkAgenteCompensacao_Unchecked(object sender, RoutedEventArgs e)
        {
            CmbAgenteCompensacao.IsEnabled = false;
            CmbAgenteCompensacao.SelectedIndex = -1;
            this.presenter.RetirarInformacaoObrigatoria();
            CmbAgenteCompensacao.Focus();
        }

        private void DtpHorarioIncioPregao_KeyUp(object sender, KeyEventArgs e)
        {
            this.presenter.ativarControle();
        }
        #endregion

        

        #endregion

        #region ICadastroParametro Members

        /// <summary>
        /// Atualizar a propriedade de item selecionado
        /// </summary>
        public void AtualizarAgenteCompensacao()
        {
            CmbAgenteCompensacao.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
            CmbAgenteCompensacao.UpdateTarget(SinacorComboBox.SelectedValueProperty);
        }

        /// <summary>
        /// Atualizar a propriedade de item selecionado
        /// </summary>
        public void AtualizarMensagem()
        {
            CmbNaoExecutada.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
            CmbNaoExecutada.UpdateTarget(SinacorComboBox.SelectedValueProperty);
        }

        /// <summary>
        /// Atualizar a propriedade de item selecionado
        /// </summary>
        public void AtualizarMensagemZeComZe()
        {
            CmbIndSolucaoZeZe.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
            CmbIndSolucaoZeZe.UpdateTarget(SinacorComboBox.SelectedValueProperty);
        }

        /// <summary>
        ///Atualizar a propriedade de item selecionado
        /// </summary>
        /// 

        public void AtualizarOperador()
        {
            CmbOperadoPadraoCustodia.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
            CmbOperadorAutomatico.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
            CmbOperadorPadraoOrdemSemIdentificacao.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
            CmbPreferenciaPadrao.UpdateTarget(SinacorComboBox.ItemsSourceProperty);



            CmbOperadoPadraoCustodia.UpdateTarget(SinacorComboBox.SelectedValueProperty);
            CmbOperadorAutomatico.UpdateTarget(SinacorComboBox.SelectedValueProperty);
            CmbOperadorPadraoOrdemSemIdentificacao.UpdateTarget(SinacorComboBox.SelectedValueProperty);
            CmbPreferenciaPadrao.UpdateTarget(SinacorComboBox.SelectedValueProperty);

        }

        public void CarregarControle()
        {

            DtpHorarioIncioPregao.UpdateTarget(SinacorTimePicker.ValueProperty);

            /// Retirada do campo a seguir TxtUsuarioAtivo.UpdateTarget(SinacorInt16TextBox.ValueProperty);
            TxtCaminhoArquivoOrigem.UpdateTarget(SinacorFolderPicker.ValueProperty);
            TxtCPMF.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            TxtTipoCorretagemHomeBroker.UpdateTarget(SinacorInt16TextBox.ValueProperty);
            ChkAgenteCompensacao.UpdateTarget(SinacorCheckBox.IsCheckedProperty);



            // Frame Parametros Gerais
            ChkCasaOrdemPreBoleto.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            ChkUtilizaDescontoOperacao.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            ChkRestoDistribuicao.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            ChkUtilizaCompliance.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            ChkUsaFracionarioVista.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            ChkUtilizaBloqueioClientes.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            ChkVerificaSaldo.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            ChkIndicaPreBoleto.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            ChkIndicaAberturaOrdem.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            ChkUsaCliente.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            ChkNumeracaoAbributo.UpdateTarget(SinacorCheckBox.IsCheckedProperty);

            // Frame Ordens

            ChkMantemTelaPreBoleto.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            ChkDigitoCliente.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            ChkGravaSempre.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            ChkTipoLiquidacao.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            ChkCarteiraAutomatica.UpdateTarget(SinacorCheckBox.IsCheckedProperty);


            // Frame Cancelamento


            ChkAposPeriodo.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            ChkCancelaValidade.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            ChkParaAnoSeguinte.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            ChkNaoExecutada.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            TxtAposPeriodo.UpdateTarget(SinacorInt16TextBox.ValueProperty);
            CmbNaoExecutada.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
            CmbIndSolucaoZeZe.UpdateTarget(SinacorComboBox.ItemsSourceProperty);

            // Frame Sinal Mega Bolsa

            ChkTrataSinal.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            ChkDesprezaOferta.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            ChkCalculoAutomatico.UpdateTarget(SinacorCheckBox.IsCheckedProperty);
            ChkVerificaBloqueio.UpdateTarget(SinacorCheckBox.IsCheckedProperty);


        }

        public void AtualizaStatusBotao()
        {
            // Button

            BtnCancelar.UpdateTarget(Button.IsEnabledProperty);
            BtnSalvar.UpdateTarget(Button.IsEnabledProperty);

        }


        #region Solicitar confirmacao do desfazer
        public bool ConfirmarDesfazer()
        {
            return (SinacorMessageBox.Show((string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Parametro.Message.ConfirmaOperacao"), SinacorMessageBoxButton.YesNo, SinacorMessageBoxImage.Question) == SinacorMessageBoxResult.Yes);
        }
        #endregion



        #region Solicitar confirmacao do salvar
        public bool ConfirmarSalvar()
        {
            return (SinacorMessageBox.Show((string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Parametro.Message.ConfirmaSalvarParametro"), SinacorMessageBoxButton.YesNo, SinacorMessageBoxImage.Question) == SinacorMessageBoxResult.Yes);
        }
        #endregion


        #region Informar Sucesso ao Desfazer
        public void InformarSucessoDesfazer()
        {
            SinacorMessageBox.Show((string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Parametro.Message.OperacaoSucesso"), SinacorMessageBoxImage.Information);
        }
        #endregion


        #region Informar Sucesso ao Salvar
        public void InformarSucessoSalvar()
        {
            SinacorMessageBox.Show((string)ResourceProviderManager.GetResourceProvider().TryGetResource("Bovespa.Parametro.Message.OperacaoSucesso"), SinacorMessageBoxImage.Information);
        }


        #endregion



        #endregion








        #region ICadastroParametro Members


        public void AtivarAgenteCompensacao()
        {
            this.CmbAgenteCompensacao.IsRequired = true;
            CmbAgenteCompensacao.UpdateLayout();
        }

        public void DesativarAgenteCompensacao()
        {
            this.CmbAgenteCompensacao.IsRequired = false;
            CmbAgenteCompensacao.UpdateLayout();
        }

        #endregion

        private void ChkAposPeriodo_Checked(object sender, RoutedEventArgs e)
        {
            this.presenter.AtivarInformacaoObrigatoriaAposPeriodo();
        }

        private void ChkAposPeriodo_Unchecked(object sender, RoutedEventArgs e)
        {
            this.presenter.DesativarInformacaoObrigatoriaAposPeriodo();
        }

        #region ICadastroParametro Members


        public void AtivarDiasCancelamentoOrdem()
        {
            this.TxtAposPeriodo.IsRequired = true;
            TxtAposPeriodo.UpdateLayout();
        }

        public void DesativarDiasCancelamentoOrdem()
        {
            this.TxtAposPeriodo.IsRequired = false;
            TxtAposPeriodo.UpdateLayout();
        }

        private void TxtCaminhoArquivoOrigem_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            presenter.Parametro.ocorreAlteracao = true;
        }

        #endregion
    }
}
